home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C20 / SimpleGenerators.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  925 b   |  39 lines

  1. //: C20:SimpleGenerators.h
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Generic generators, including
  7. // one that creates pairs
  8. #include <iostream>
  9. #include <utility>
  10.  
  11. // A generator that increments its value:
  12. template<typename T>
  13. class IncrGen {
  14.   T i;
  15. public:
  16.   IncrGen(T ii) : i (ii) {}
  17.   T operator()() { return i++; }
  18. };
  19.  
  20. // A generator that produces an STL pair<>:
  21. template<typename T1, typename T2>
  22. class PairGen {
  23.   T1 i;
  24.   T2 j;
  25. public:
  26.   PairGen(T1 ii, T2 jj) : i(ii), j(jj) {}
  27.   std::pair<T1,T2> operator()() { 
  28.     return std::pair<T1,T2>(i++, j++); 
  29.   }
  30. };
  31.  
  32. // A generic global operator<< 
  33. // for printing any STL pair<>:
  34. template<typename Pair> std::ostream&
  35. operator<<(std::ostream& os, const Pair& p) {
  36.   return os << p.first << "\t" 
  37.     << p.second << std::endl;
  38. } ///:~
  39.